延續上一篇文章,values 分成 primitive value 和 object value; 這兩種 values 在 assigned, passed 的時候會有不同的行為:call by values / call by reference。
開始今天的學習吧
在 JS 有三種方式,來宣告一個變數
var myName = "Cheryl";
if (true) {
var myName = "Cheryl";
let age = 23;
}
console.log(myName); // "Cheryl"
console.log(age); // undefined
由 let 宣告的變數,會在宣告的時候,找尋所屬的 block-scope,在 block-scope 以外的地方,無法 access 該變數。( 與 block scoping 相對的是 regular / funcion scoping )
const myBirthday = '2022/01/01';
let myAge = 23;
if (true) {
myBirthday = '2022/12/31'; // ERROR!
myAge = 24; // OK!
}
由 const 宣告的變數,無法被 re-assigned,但不是 unchangeable。
這邊舉個例子,用 const 來宣告一個 object:
const me = {
'firstName': 'Cheryl',
'lastName': 'Chuang',
'age': 23,
};
me['age'] = 24;
console.log(me);
// {
// 'firstName': 'Cheryl',
// 'lastName': 'Chuang',
// 'age': 24,
// }
因為 const 雖然不能被 re-assigned,但 changeable 的特性,作者不建議用 const 來宣告 object,因為 object 的 value 還是可以改變,容易造成混淆。像是上面的 me 物件,age 就和宣告時不同,容易讓人懷疑:所以 me 的 age 是 23 還 24 這樣的問題。
因此作者點出,如果你有 primitive values 需要宣告,且這些 value 的值不會改變,那麼用 const 非常適合,也可增加易讀性,像是 const isFemale = true;
這樣。
最後來個作者的 tips:
If you stick to using const only with primitive values, you avoid any confusion of re-assignment (not allowed) vs. mutation (allowed)! That's the safest and best way to use const.
今天的學習到這邊
[ 參考 ]